package reflect;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 常用的元注解:
 * @Target:用于知名当前注解可以被应用的位置, 具体位置有ElementType表示
 *   ElementType.TYPE:注解可以被应用在类上, 接口上
 *   ElementType.METHOD:注解可以被应用在方法上
 *   ElementType.FIELD:注解可以被应用在成员变量/属性上
 *   ElementType.PARAMETER:注解可以被应用在方法参数上
 *   ElementType.CONSTRUCTOR:注解可以被应用在构造器上
 *
 *   例如:当前注解只能在类上使用
 *        @Target(ElementType.TYPE)
 *   例如:当前注解可以在类上及属性上使用(数组形式指定)
 *        @Target({ElementType.TYPE,ElementType.FIELD})
 * @Retention:用于指明当前注解被保留的时间长短, 集体形式由RententionPolicy表示
 *   RententionPolicy.SOURCE:注解仅保留在源文件中, 不保留在class字节码文件中
 *   RententionPolicy.CLASS:注解保留在class字节码文件中(默认保留级别)
 *   RententionPolicy.RUNTIME:注解保留在class字节码文件中, 在运行期间也保留, 可以通过反射获得注解信息
 */

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
public @interface AutoRunClass {
}
